TimingΒΆ

using FileIO;
using LibSndFile;
using Plots;
using DSP;
using SampledSignals;
using FixedPointNumbers;
using CUDA
using CUDA.CUFFT
tetris = load("tetris_piano_mono.wav");
fs = round(Int,tetris.samplerate);
tetris.data = tetris.data[1:(90*fs),:];
x = Float32.(tetris.data[:,1] .+ tetris.data[:,2]);
tetris
h = Float32.([-0.125,-0.25,0.75,-0.25,-0.125]);

Time-domain filter

Sequential time for 90s @ 44.1 kHz, 5 tap is approx 4.3ms

Best GPU time is approx 1.3 ms

Base.@elapsed y = filt(h,x)
0.00430698
x_tensor = CuArray(reshape(x,(size(x,1),1,1,1)));
h_tensor = CuArray(reshape(h,(size(h,1),1,1,1)));
CUDA.@elapsed y_tensor = CUDA.CUDNN.cudnnConvolutionForwardWithDefaults(h_tensor,x_tensor)
0.00137408f0
;cat seq_time.py
import librosa
import time
y,sr = librosa.load("tetris_piano_mono.wav")
t1 = time.time()
S = librosa.feature.melspectrogram(
    y=y,
    sr=sr,
    n_fft=16384,
    hop_length=128,
    n_mels=8192,
)
t2 = time.time()
print(t2-t1)
;taskset --cpu-list 0 python3 seq_time.py
43.419060707092285
/usr/local/lib/python3.9/dist-packages/librosa/filters.py:238: UserWarning: Empty filters detected in mel frequency basis. Some channels will produce empty responses. Try increasing your sampling rate (and fmax) or reducing n_mels.
  warnings.warn(